Skip to content

feat: allow customizing the subdomain template for preview deployments#4351

Open
ajnart wants to merge 18 commits into
Dokploy:canaryfrom
ajnart:feat/custom-preview-template
Open

feat: allow customizing the subdomain template for preview deployments#4351
ajnart wants to merge 18 commits into
Dokploy:canaryfrom
ajnart:feat/custom-preview-template

Conversation

@ajnart

@ajnart ajnart commented May 4, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add template variable interpolation (${prNumber}, ${branchName}, ${appName}, ${uniqueId}) to the preview wildcard domain field
  • Replace the "Wildcard Domain" UI with a "Preview Domain Template" field that shows available variables and a live example of the resulting URL
  • When ${prNumber} or ${branchName} is present, no random suffix is appended (these are already unique per PR)
  • Fully backward-compatible: existing *.traefik.me values work as before with no migration needed
Using PR number Overview
CleanShot 2026-05-04 at 16 21 58 image

Test plan

  • Unit tests added for interpolateSubdomainTemplate (9 tests covering variable replacement, slugification, DNS length truncation, special characters)
  • Existing traefik tests pass (14 tests, no regressions)
  • Manual testing: set template to ${prNumber}.previews.example.com, verify preview URL in PR comment
  • Manual testing: verify legacy *.traefik.me still works unchanged

Closes #4283

@ajnart ajnart requested a review from Siumauricio as a code owner May 4, 2026 14:21
@dosubot dosubot Bot added size:L This PR changes 100-499 lines, ignoring generated files. enhancement New feature or request labels May 4, 2026
ajnart added 2 commits May 4, 2026 16:23
…omains

Support ${prNumber}, ${branchName}, ${appName}, and ${uniqueId} variables
in the preview wildcard domain field. When ${prNumber} or ${branchName} is
present, no random suffix is appended since these already provide uniqueness.
Falls back to existing behavior when no template variables are used.

Closes Dokploy#4283
Replace the Wildcard Domain field with a Preview Domain Template field
that shows available template variables and a live example of the
resulting URL. Add unit tests for the interpolation logic covering
slugification, DNS length limits, and variable replacement.
@ajnart ajnart force-pushed the feat/custom-preview-template branch from afb3d97 to 26440e8 Compare May 4, 2026 14:24
autofix-ci Bot and others added 16 commits May 4, 2026 14:25
The empty-records branch of `main()` returned without calling
`process.exit(0)`, leaving the Drizzle Postgres connection pool
holding the event loop open. The `migrate-auth-secret` process
then hangs indefinitely after printing "No 2FA records found,
nothing to migrate." causing the upstream `0.29.3.sh` security
migration script (which calls this via `docker exec`) to never
reach its final `docker service update` step that mounts the new
Docker Secret. Operators end up with the new secret created but
the dokploy service still configured with the hardcoded
`BETTER_AUTH_SECRET`, while believing the migration completed.

Match the success branch a few lines below which already does
`process.exit(0)`, and the pattern used in sibling scripts
`reset-password.ts` and `reset-2fa.ts`.

Closes Dokploy#4392
…ret-exit-on-empty

fix(migrate-auth-secret): exit cleanly when there are no 2FA records
Adds an "Import" option to the Create Service dropdown that lets users
paste a base64-encoded compose export, preview the template (compose YAML,
domains, envs, mounts) before confirming, and create the service only on
confirm. Adds a `previewTemplate` tRPC procedure that processes the base64
without touching the DB, with server access validation via session.
…-base64

feat(compose): add import from base64 in create service dropdown
- Updated the GitHub Actions workflow to sync versioning across MCP, CLI, and SDK repositories.
- Added steps to bump the version in the SDK repository and regenerate tools from the latest OpenAPI spec.
- Improved commit message formatting to include source and release information for all repositories.
- Ensured successful synchronization messages for each repository after the version update.
- Introduced a new `readLogs` procedure that allows users to retrieve logs for a specific deployment by providing the deployment ID and an optional tail parameter.
- Implemented permission checks to ensure users have access to the requested logs.
- Enhanced log retrieval for both cloud and non-cloud environments, utilizing appropriate commands based on the server context.

Resolve Dokploy/mcp#14
- Implemented server access validation in deployment procedures to ensure users can only access deployments associated with their active organization.
- Added checks to throw an UNAUTHORIZED error if a user attempts to access a deployment linked to a server outside their organization.

This enhancement improves security and access control within the deployment management system.
- Added validation to prevent users from being invited with the owner role in the organization and user routers.
- Implemented TRPCError responses to ensure proper error handling when attempting to assign the owner role.
This change enhances role management and security within the organization structure.

https://github.com/Dokploy/dokploy/security/advisories/GHSA-fm9p-wmpw-gxjh
- Added functionality to delete old sessions when a user updates their password, ensuring that only the current session remains active.
- This change enhances security by preventing unauthorized access from previous sessions after a password change.

Close here https://github.com/Dokploy/dokploy/security/advisories/GHSA-rr9m-w87g-46f3
* fix: copy Dokploy server IP when clicking server badge

When a service runs on the local Dokploy server (no remote server),
clicking the server badge did nothing because `data.server` is null.
Now falls back to the server IP from settings so the badge always
copies an IP address.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(copy-ip): implement IP address copying functionality across database service components

- Added the ability to copy the server IP address to the clipboard when clicking the server badge in various database service components (Libsql, MariaDB, MongoDB, MySQL, PostgreSQL, Redis).
- Integrated the `copy-to-clipboard` library and `sonner` for user feedback upon successful copy action.
- Ensured fallback to the server IP from settings when the service data is not available, enhancing user experience and functionality.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Signed-off-by: Nahidujjaman Hridoy <hridoyboss12@gmail.com>
…ew-template

# Conflicts:
#	apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx
#	packages/server/src/services/preview-deployment.ts
@ajnart

ajnart commented May 19, 2026

Copy link
Copy Markdown
Contributor Author

Updated to support the ".sslip.io" new domains

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow customizing the subdomain template for Preview Deployments

6 participants